/*
给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。

有效字符串需满足：
	左括号必须用相同类型的右括号闭合。
	左括号必须以正确的顺序闭合。
*/


var isValid = function(s){
	if(s.length % 2 === 1) {return false} //花括号数量为奇数是 直接 false
	const stack = [];           //创建一个空栈
	for(let i = 0; i < s.length; i++ ){     //遍历字符串
		const c = s[i];
		if( c === '(' || c === '{' || c === '['){ //判断左括号
			stack.push(c)          // [ ( { 放入栈
		} else {        //判断右括号
			const top = stack[stack.length -1]  //保存栈顶元素
			if(                                //栈顶元素遇到 对应的右括号 就弹出栈
				(top === '(' && c === ')') ||
				(top === '{' && c === '}') ||
				(top === '[' && c === ']')
			){
				stack.pop()
			}else{
				return false
			}
		}
	}
	return stack.length === 0
}

console.log(isValid('[]]'))
console.log(isValid('(([]]))'))
console.log(isValid('((([])))'))
console.log(isValid('{[()()]}'))